/**
 * 权限管理工具
 */

// 角色类型定义
const ROLES = {
  EMPLOYEE: 1,    // 组员
  LEADER: 2,      // 组长
  WAREHOUSE: 3    // 仓库管理员
};

// 角色名称映射
const ROLE_NAMES = {
  [ROLES.EMPLOYEE]: '组员',
  [ROLES.LEADER]: '组长',
  [ROLES.WAREHOUSE]: '仓库管理员'
};

// 功能模块定义
const MODULES = {
  PIECEWORK_ENTRY: 'piecework-entry',      // 计件录入
  SALARY_QUERY: 'salary-query',            // 查询工资
  LEADER_APPROVAL: 'leader-approval',      // 组长核对
  INVENTORY_MANAGEMENT: 'inventory-management' // 仓库管理
};

// 权限配置：定义每个角色可以访问的功能模块
const ROLE_PERMISSIONS = {
  [ROLES.EMPLOYEE]: [
    MODULES.PIECEWORK_ENTRY,  // 组员可以录入计件
    MODULES.SALARY_QUERY      // 组员可以查询工资
  ],
  [ROLES.LEADER]: [
    MODULES.LEADER_APPROVAL   // 组长只有组长核对权限
    
  ],
  [ROLES.WAREHOUSE]: [
    MODULES.INVENTORY_MANAGEMENT, // 仓库管理员可以管理仓库
  ]
};

/**
 * 获取用户信息
 */
const getUserInfo = () => {
  return wx.getStorageSync('userInfo') || null;
};

/**
 * 获取用户角色
 */
const getUserRole = () => {
  const userInfo = getUserInfo();
  return userInfo ? userInfo.role : null;
};

/**
 * 获取用户角色类型（从后端返回的role字段）
 */
const getUserType = () => {
  const userInfo = getUserInfo();
  return userInfo ? userInfo.role : null;
};

/**
 * 检查用户是否有访问指定模块的权限
 * @param {string} moduleId 模块ID
 * @returns {boolean} 是否有权限
 */
const hasPermission = (moduleId) => {
  const userType = getUserType();
  if (!userType) {
    return false;
  }

  const permissions = ROLE_PERMISSIONS[userType] || [];
  const hasAccess = permissions.includes(moduleId);
  
  return hasAccess;
};

/**
 * 检查用户是否为指定角色
 * @param {number} roleType 角色类型
 * @returns {boolean} 是否为指定角色
 */
const isRole = (roleType) => {
  const userType = getUserType();
  return userType === roleType;
};

/**
 * 获取用户可访问的功能模块列表
 * @returns {Array} 可访问的模块ID数组
 */
const getUserPermissions = () => {
  const userType = getUserType();
  return ROLE_PERMISSIONS[userType] || [];
};

/**
 * 权限拦截器 - 在页面跳转前检查权限
 * @param {string} moduleId 模块ID
 * @param {string} pagePath 页面路径
 * @param {Function} callback 权限通过后的回调
 */
const checkPermissionAndNavigate = (moduleId, pagePath, callback) => {
  if (hasPermission(moduleId)) {
    if (callback) {
      callback();
    } else {
      wx.navigateTo({ url: pagePath });
    }
  } else {
    wx.showToast({
      title: '暂无权限访问此功能',
      icon: 'none',
      duration: 2000
    });
  }
};

/**
 * 获取角色显示名称
 * @param {number} roleType 角色类型
 * @returns {string} 角色名称
 */
const getRoleName = (roleType) => {
  return ROLE_NAMES[roleType] || '未知角色';
};

/**
 * 记录权限日志
 * @param {string} action 操作
 * @param {string} module 模块
 * @param {boolean} result 结果
 */
const logPermission = (action, module, result) => {
  // 权限日志记录 - 生产环境可关闭
  // const userInfo = getUserInfo();
  // const userName = userInfo ? userInfo.name || userInfo.account : '未知用户';
  // const userType = getUserType();
};

module.exports = {
  ROLES,
  ROLE_NAMES,
  MODULES,
  ROLE_PERMISSIONS,
  getUserInfo,
  getUserRole,
  getUserType,
  hasPermission,
  isRole,
  getUserPermissions,
  checkPermissionAndNavigate,
  getRoleName,
  logPermission
}; 